package com.cd.socialMarketing.repository;

/** @author Agustin Cingolani
 *  23/01/2013
 */

public class PropertyAliasHelper {
	
	private String path;
	private String property;
	private String alias;
	private String newExpression;
	private boolean aliasCreationNecessary = true;

	/**
	 * Recibe una expresion del tipo: nodoPorProducto.producto.nombre
	 * Para que pueda ser interpretada por hibernate, se deben hacer 2 cosas:
	 * 1. Declarar un alias que no puede tener "." (ej: nodoPorProducto_producto)
	 * 2. Renombrar la condicion usando el alias anterior (ej: nodoPorProducto_producto.producto)
	 * @param propertyExpression
	 */
	public PropertyAliasHelper(String propertyExpression) {
		if (propertyExpression.contains(".")) {
			path = propertyExpression.substring(0, propertyExpression.lastIndexOf("."));
			property = propertyExpression.substring(propertyExpression.lastIndexOf(".") + 1);
			alias = path.replaceAll("\\.", "_");
			newExpression = alias + "." + property;
		} else {
			path = property = alias = newExpression = propertyExpression;
			aliasCreationNecessary = false;
		}
	}

	public boolean isAliasCreationNecessary() {
		return aliasCreationNecessary;
	}

	public String getPath() {
		return path;
	}
	
	public String getProperty() {
		return property;
	}
	
	public String getAlias() {
		return alias;
	}
	
	public String getNewExpression() {
		return newExpression;
	}
}
